[Vert.x]JVM上での非同期・Non Blockingフレームワーク – (1)開発環境構築とサンプルソース作成
はじめに
最近はJavaにも興味を持ち始めている、t.hondaです。Javaに関するフレームワークでVert.xを見つけたので、それについて書きたいと思います。
Vert.xは「Node.jsの特徴を受け継ぐJVM上で動くフレームワーク」といった感じのものですが、他にも以下のような特徴を持ちます。
- 多言語で記述可能(JavaScript, Ruby, Groovy, Javaなど)
- ブロッキングが発生するような処理(JDBCなど)を独立した処理として切り出すことで、全体をブロックしないようにすることが可能
他にも多くの特徴を持ちますが、以下に挙げるサイトに詳しいので参考にしてください。
Vert.x Main Manual
Vert.x がいいね!(第1回:入門する)
Vert.xのアーキテクチャ
開発環境構築〜サンプルソース作成
では、Vert.xの開発環境の構築とソースの作成です。Maven、Eclipseを使い、ソースを作成してステップ実行するまでの手順について記述します。
1.プロジェクトの作成〜Eclipseへの取り込み
Mavenを使い、プロジェクトを作成します。なので予めMavenをインストールしておいてください。ほぼDeveloping Vert.x Modules with Mavenと同じ手順となります。
以下のコマンドを実行し、プロジェクトを作成します。
$ mvn archetype:generate -Dfilter=io.vertx: -DgroupId=com.mycompany -DartifactId=my-vertx-module -Dversion=0.1
作成されたプロジェクトのフォルダに移動します。
$ cd my-vertx-module
Mavenを使い、必要なモジュール・雛形をインストールします。
$ mvn install
Eclipseの「Project Explorer」より、上記で作成したMavenのプロジェクトをインポートします。(pom.xmlがあるフォルダ「my-vertx-module」をインポート時に指定してください。)
2.サンプルソースの作成
では、ソースの作成です。先にも書いたように様々な言語を使用できますが、今回はJavaを使用しました。src/main/java内に「HelloVertX」クラスを作成し、以下のように記述します。
package com.mycompany; import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServer; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.platform.Verticle; public class HelloVertX extends Verticle{ public void start() { final HttpServer server = vertx.createHttpServer(); server.requestHandler(new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { req.response().headers().set("Content-Type", "text/plain"); req.response().end("Hello vert.x!"); }; }); server.listen(8080); } }
ちょっと冗長かもしれませんが、Hello World的な処理を行うソースです。ポート8080番でリクエストを受け付け、レスポンスとして「Hello vert.x!」と返します。
Mainの定義
上記で作成したクラスを、アプリケーションのMainとして定義します。src/main/rosourcesの「mod.json」に「"main":"com.mycompany.PingVerticle",」という記述があるので、以下のように修正します。
// Java verticle //"main":"com.mycompany.PingVerticle", "main":"com.mycompany.HelloVertX",
3.アプリケーションの実行
では、実行してみます。まずはデバッグなしの実行手順です。以下のコマンドを実行します。
$ mvn clean compile vertx:runMod
実行できたら、ブラウザでhttp://localhost:8080にアクセスしてみます。「Hello vert.x!」が表示されたら、実行完了です。
4.アプリケーションのデバッグ
次にデバッグの手順です。ソース内にブレークポイントを設定し、以下のコマンドでデバッグ用のプロセスを起動します。
$ mvnDebug vertx:runMod
このとき、ターミナルに表示されるポート番号をメモしておいてください。(デフォルトでは8000だと思われます。)
Eclipseから、上記で起動したプロセスにアタッチします。手順としては
- Eclipseの「Run」-「Debug Configuration...」を開く
- 「Remote Java Application」を右クリックし、「New」を押す
- 「Connect」タブの「Host」にはlocalhost、「Port」には上記でメモしたポート番号を記入する
- 「Debug」ボタンを押す
- ブラウザにてhttp://localhost:8080にアクセスする
となります。これでブレークポイントで処理が止まり、ステップ実行が出来ればデバッグ環境も完成です。
まとめ
ここ数年はNon-blockingなサーバ処理といえばNode.js、という感じですが、JVM上でも実行できるフレームワークがあることが分かりました。Javaの豊富なライブラリや既存資産を生かしたい、何らかの理由でJavaや他言語(Vert.xは様々な言語で記述できる!)で処理を書きたい等の場合、Vert.xを検討してみてもいいかもしれません。
参考サイト
上と重なるものもありますが、以下のサイトを参考にさせて頂きました。ありがとうございました。
Developing Vert.x Modules with Maven
Vert.x がいいね!(第2回:開発環境を構築する)
Debugging vert.x applications with Eclipse
Vert.xアプリをEclipseからデバッグする
Run Vertx in an IDE
Vert.x Main Manual
Vert.x がいいね!(第1回:入門する)
Vert.xのアーキテクチャ